package com.yxc.ejad.annotation;

import co.elastic.clients.elasticsearch._types.mapping.FieldType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * ES字段，生成mapping使用
 *
 * @author: YXC
 * @time: 2023/11/7 10:02
 **/
// 运行时生效
@Retention(RetentionPolicy.RUNTIME)
// 字段注解
@Target(ElementType.FIELD)
public @interface EsField {

    /**
     * 字段类型
     */
    EsFieldType type() default EsFieldType.AUTO;
    /**
     * 日期类型的格式化
     */
    String format() default "yyyy-MM-dd HH:mm:ss";
    /**
     * 存储的字段名
     */
    String fieldName();
    /**
     * 是否创建索引
     */
    boolean index() default true;

    public enum EsFieldType {
        /**
         * 自动判断：
         * String -> text
         * Integer,int -> integer
         * Double,double -> double
         * Date,LocalDateTime -> date
         * Boolean,boolean -> boolean
         * Long,long -> long
         * Float,float -> float
         */
        AUTO("auto"),
        /**
         * 不进行存储
         */
        NON(""),
        KEYWORD("keyword"),
        TEXT("text"),
        INTEGER("integer"),
        DOUBLE("double"),
        DATE("date"),
        BOOLEAN("boolean"),
        LONG("long"),
        FLOAT("float");

        private String value;

        EsFieldType(String value) {
            this.value = value;
        }
    }

}
